﻿using System;
using System.Collections.Generic;
using System.Text;
using MTG.DTO.GameCollections;

namespace MTG.DTO
{
    public interface IPlayer
    {
        /// <summary>
        /// Keeps track of the life of the player
        /// </summary>
        int LifeCount
        {
            get;
            set;
        }

        /// <summary>
        /// Holds a records to the deck associated with this player instance
        /// </summary>
        IGameCollection PlayerDeck
        {
            get;
            set;
        }

        /// <summary>
        /// Holdsa  record to the hand associated with this player instance
        /// </summary>
        IGameCollection PlayerHand
        {
            get;
            set;
        }

        /// <summary>
        /// Holds a record to the graveyard associated with this player instance
        /// </summary>
        IGameCollection PlayerGraveyard
        {
            get;
            set;
        }

        /// <summary>
        /// Keeps track of all the cards in play for this particular player instance
        /// </summary>
        IGameCollection CardsInPlay
        {
            get;
            set;
        }

        /// <summary>
        /// Holds a collection of mana objects
        /// </summary>
        IGameCollection ManaPool
        {
            get;
            set;
        }

        /// <summary>
        /// puts a card in play, adds to the current cards in play List.
        /// </summary>
        void PutCardInPlay(ICard card);

        /// <summary>
        /// puts a card in to the hand of the current player
        /// </summary>
        void PutCardInHand(ICard card);

        /// <summary>
        /// puts a card into the graveyard, either from play or from hand
        /// </summary>
        void PutCardInGraveyard(ICard card);

        /// <summary>
        /// puts the top card of the deck into the hand of the player, adds  a card to the current hand List
        /// </summary>
        void DrawFromDeckIntoHand(ICard card);

        /// <summary>
        /// retrieves a card in hand based on an index
        /// </summary>
        ICard GetCardInHand(int index);

        /// <summary>
        /// retrieves a card in hand based on the card name
        /// </summary>
        ICard GetCardInHand(string cardName);

        /// <summary>
        /// retrieves the top card of the current deck.
        /// </summary>
        ICard GetTopOfDeck();
    }
}
